/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package com.architexa.org.eclipse.gef.ui.actions;

import com.architexa.org.eclipse.gef.dnd.SimpleObjectTransfer;

import org.eclipse.swt.dnd.Transfer;


/**
 * A GEF clipboard for cut/copy/paste actions between GEF editors.  It exists mainly for
 * convenience and allows clients to add graphical objects to the system clipboard.  It
 * will not work between two instances of the workbench (but will work between multiple 
 * windows belonging to a single instance of the workbench).  Setting the contents of the
 * clipboard will erase the previous contents of the clipboard.
 * 
 * @author Eric Bordeau
 * @author Pratik Shah
 */
public class Clipboard {

private static Clipboard defaultClipboard = new Clipboard();
private static final SimpleObjectTransfer TRANSFER = new SimpleObjectTransfer() {
	private final String TYPE_NAME = "org.eclipse.gef.clipboard.transfer"; //$NON-NLS-1$
	private final int TYPE_ID = registerType(TYPE_NAME);
	protected int[] getTypeIds() {
		return new int[] {TYPE_ID};
	}
	protected String[] getTypeNames() {
		return new String[] {TYPE_NAME};
	}
};

/**
 * Returns the default clipboard.  
 * @return the default clipboard
 */
public static Clipboard getDefault() {
	return defaultClipboard;
}

/**
 * Constructs a new Clipboard object.
 * @deprecated As of 3.1, the GEF Clipboard synchronizes with the system clipboard.
 * Multiple instances of this class should not be created.  Use {@link #getDefault()}.
 * This method will be removed in future releases.
 */
public Clipboard() { }

/**
 * Returns the current contents of the clipboard.
 * @return contents of the clipboard
 */
public Object getContents() {
	org.eclipse.swt.dnd.Clipboard cb = new org.eclipse.swt.dnd.Clipboard(null);
	Object contents = cb.getContents(TRANSFER);
	cb.dispose();
	return contents;
}

/**
 * Sets the contents of the clipboard.  This will erase the previous contents of this as
 * well as the system clipboard.  The provided contents will not be garbage-collected
 * until some other contents are set using this method.
 * 
 * @param contents the new contents
 */
public void setContents(Object contents) {
	org.eclipse.swt.dnd.Clipboard cb = new org.eclipse.swt.dnd.Clipboard(null);
	cb.setContents(new Object[] {contents}, new Transfer[] {TRANSFER});
	cb.dispose();
}

}